import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

# 示例数据
data = {
    '作物名称': ['刀豆', '包菜', '南瓜', '土豆', '大白菜', '大麦', '小青菜', '小麦', '榆黄菇', '水稻', '油麦菜',
             '爬豆', '玉米', '生菜', '白灵菇', '白萝卜', '空心菜', '红萝卜', '红薯', '红豆', '绿豆', '羊肚菌',
             '芸豆', '芹菜', '茄子', '荞麦', '莜麦', '菜花', '菠菜', '西红柿', '谷子', '豇豆', '辣椒', '青椒',
             '香菇', '高粱', '黄心菜', '黄瓜', '黄豆', '黍子', '黑豆'],
    '平均销售单价': [7.2, 6.93, 1.5, 4.0, 2.5, 3.5, 6.13, 3.5, 57.5, 7.0, 5.33,
                  6.75, 3.0, 5.6, 16.0, 2.5, 4.8, 3.25, 3.25, 8.25, 7.0, 100.0,
                  6.93, 4.27, 5.87, 40.0, 5.5, 5.87, 6.13, 6.67, 6.75, 8.53, 7.73,
                  5.77, 19.0, 6.0, 4.8, 7.47, 3.25, 7.5, 7.5]
}

df = pd.DataFrame(data)

# 随机打乱作物及对应销售单价的顺序
shuffled_indices = np.random.permutation(len(df))
df = df.iloc[shuffled_indices].reset_index(drop=True)

# 设置字体为SimHei，确保中文可以显示
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置支持中文显示的字体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 使用新的配色方案 'plasma'
colors = plt.cm.plasma(np.linspace(0, 1, len(df)))

# 绘制横向条形图，调整height参数以增加条形之间的间隔
plt.figure(figsize=(25, 15))
bars = plt.barh(df['作物名称'], df['平均销售单价'], color=colors, edgecolor='black', height=0.8)  # 设置条形高度为0.6


# 设置作物名称字体大小
plt.yticks(fontsize=20)  # 将作物名称的字体大小设置为14
# 添加标签和标题
plt.ylabel('作物名称', fontsize=20)  # 修改为纵轴标签
plt.xlabel('平均销售单价 (元/斤)', fontsize=20)  # 修改为横轴标签
plt.title('每种作物的平均销售单价', fontsize=20, weight='bold')

# 在每个柱状图上标注具体的数值
for bar in bars:
    width = bar.get_width()  # 获取横向条形图的长度
    plt.text(width + 1, bar.get_y() + bar.get_height()/2,  # 将数值显示在每个横向条形图的末尾
             round(width, 2), va='center', ha='left', fontsize=15, color='black')

# 添加背景颜色和优化网格样式
plt.gca().set_facecolor('#f5f5f5')  # 设置背景颜色
plt.grid(axis='x', linestyle='--', alpha=0.7)  # 横向网格线

# 优化图表边距和布局
plt.tight_layout(pad=2.0)

# 保存图表为文件
plt.savefig('作物平均销售单价_横向柱状图_间隔调整.png', dpi=300, bbox_inches='tight')  # 保存为PNG文件，分辨率为300 DPI

# 显示图表
plt.show()
